package io.github.enbool;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@Profile({"dev", "test"})
@EnableSwagger2
public class Swagger2Configuration {

	@Bean
	public Docket createRestApi() {
		
		ParameterBuilder tokenPar = new ParameterBuilder();  
        List<Parameter> pars = new ArrayList<Parameter>();  
        tokenPar.name("Authorization").description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();  
        pars.add(tokenPar.build()); 
        
        Set<String> protocols = new HashSet<>();
        protocols.add("https");
        
		return new Docket(DocumentationType.SWAGGER_2)
						.protocols(protocols)
						.host("api.luck48.com")
						.apiInfo(apiInfo())
						.globalOperationParameters(pars)
						.select()
						.apis(RequestHandlerSelectors.basePackage("io.github.enbool"))
						.paths(PathSelectors.any())
						.build();
	}

	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("IOT APIs").version("1.0.0").build();
	}

}
